perm filename NATNUM[EKL,SYS]5 blob
sn#828700 filedate 1986-11-23 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 basic facts about arithmetic and proofs by Bellin
C00007 00003 inductive principles
C00014 ENDMK
C⊗;
;basic facts about arithmetic and proofs by Bellin
(wipe-out)
(proof natnum)
(decl lessp (type: |ground⊗ground→truthval|) (syntype: constant) (infixname: <)
(bindingpower: 920))
(decl add1 (type: |ground→ground|) (syntype: constant) (postfixname: |'|)
(bindingpower: 975))
(decl plus (infixname: |+|) (type: |ground⊗ground⊗ground*→ground|) (syntype: constant)
(associativity: both) (bindingpower: 930))
(decl times (type: |ground⊗ground⊗ground*→ground|) (syntype: constant)
(infixname: |*|) (associativity: both)(bindingpower: 935))
(decl (i j k n m) (sort: natnum) (type: ground))
(decl (a b c set) (type: |ground→truthval|))
;needed axioms on order
(axiom |∀n.¬n<n|)
(label irreflexivity_of_order)
(axiom |∀n m k.n<m∧m<k⊃n<k|)
(label transitivity_of_order)
(axiom |∀n.¬n<0|)
(label zeroleast1)
;successor and order
(axiom |∀n.natnum(n')|)
(label simpinfo)
(axiom |∀n.n<n'|)
(label successor1) (label succfacts)
(axiom |∀n m.¬n<m⊃m<n'|)
(label successor2) (label succfacts)
(axiom |∀n m.n'<m'≡n<m|)
(label successorless) (label succfacts)
(axiom |∀n m.(n'=m')≡(n=m)|)
(label successoreq) (label succfacts)
(axiom |∀n.¬n=0⊃0<n|)
(label zeroleast2) (label succfacts)
(axiom |∀n.0<n'|)
(label zeroleast3) (label succfacts)
(axiom |∀n.¬(n'=0)|)
(label zero_not_successor) (label succfacts)
;definition of predecessor
(decl pred (type: |ground→ground|) (syntype: constant))
(defax pred |∀n.pred(n')=n|)
(label simpinfo)
(axiom |∀n.natnum pred n|)
(label simpinfo)
;addition
(defax plus |∀n k.0+n=n∧k'+n=(k+n)'|)
(label simpinfo) (label plusfacts)
(axiom |∀n m.natnum(n+m)|)
(label simpinfo)
(axiom |∀n.n+0=n|)
(label simpinfo) (label plusfacts)
(axiom |∀n.1+n=n'∧n+1=n'|)
(label simpinfo) (label plusfacts) (label plusdef1)
(axiom |∀n k.n+k'=(n+k)'|)
(label simpinfo) (label plusfacts)
(axiom |∀n k m.(k+m=k+n)≡(m=n)|)
(label lpluscan) (label plusfacts)
(axiom |∀n k m.(m+k=n+k)≡(m=n)|)
(label rpluscan) (label plusfacts)
(axiom |∀n k.n+k=0≡n=0∧k=0|)
(label addtozero) (label plusfacts)
;the effect of the following axiom is to force sums in basically normal
;form: the "simpler" terms will come first
(axiom |∀k n.k+n=n+k|)
(label commutadd) (label plusfacts)
;multiplication
(defax times |∀n k.0*n=0∧n'*k=(n*k)+k|)
(label simpinfo) (label timesfacts) (label timesdef)
(axiom |∀n m.natnum(m*n)|)
(label simpinfo)
(axiom |∀n.n*0=0∧1*n=n∧n*1=n|)
(label simpinfo) (label timesfacts)
(axiom |∀n k.n*k'=n*k+n|)
(label timsucc) (label timesfacts)
(axiom |∀n k m.¬k=0⊃((k*m=k*n)≡(m=n))|)
(label ltimescan) (label timesfacts)
(axiom |∀n k m.¬k=0⊃((m*k=n*k)≡(m=n))|)
(label rtimescan) (label timesfacts)
(axiom |∀n m.n*m=m*n|)
(label commutmult) (label timesfacts)
(axiom |∀n k.¬n=0⊃n*k=0≡k=0|)
(label ltimestozero) (label timesfacts)
(axiom |∀n k.¬n=0⊃k*n=0≡k=0|)
(label rtimestozero) (label timesfacts)
;distributivity
(axiom |∀n k m.n*(k+m)=n*k+n*m|)
(label ldistrib) (label timesfacts) (label plusfacts)
(axiom |∀n m k.(m+k)*n=m*n+k*n|)
(label rdistrib) (label timesfacts) (label plusfacts)
;inductive principles
(proof induction)
(axiom |∀a.a(0)∧(∀n.a(n)⊃a(n'))⊃(∀n.a(n))|)
(label proof_by_induction)
(decl npars (type: |ground*|))
(decl ndf (type: |ground⊗ground*→ground*|))
(decl zcase (type: |ground*→ground|))
(axiom
|∀ndf zcase ndef.(∃fun.(∀npars n.fun(0,npars)=zcase(npars)∧
fun(n',npars)=ndef(n,fun(n,ndf(n,npars)),npars)))|)
(label inductive_definition)
;the following is a form of double induction
(axiom |∀a2.(∀n m.a2(0,n)∧a2(n,0)∧(a2(n,m)⊃a2(n',m')))⊃∀n m.a2(n,m)|)
(label proof_by_doubleinduction)
;general definitional principle for inductive functions
(decl (arb arb1 arb2) (type: |?arbitrary|))
(decl indfn (type: |ground⊗@arb→@arb|))
(decl (def_fun) (type: |ground→@arb|))
;this is the primitive recursive schema for definition on ALL
;higher type functionals:
;note the use of the variable type in declarations;
;in this way we can specialize to ANY type.
(axiom
|∀indfn arb.∃def_fun.∀n.def_fun(0)=arb∧def_fun(n')=indfn(n,def_fun(n))|)
(label high_order_natnum_definition)
;well-foundedness
(axiom |¬∃desc.∀n.desc(n')<desc(n)|)
(label infinite_descent)
(save-proofs natnum)